package com.ddwanglife.generic;

import java.util.ArrayList;
import java.util.List;

public class GenericDemo {
    /**
     * 泛型类
     * 泛型通配符 ?
     *
     * 泛型方法
     *  public <T> String method(<T> t){
     *
     *  }
     * 泛型上限 ? extends Number
     * 泛型下限 ? super T
     * 泛型数组
     * 泛型与反射
     * T E K V 这些代码都分别用在什么样的位置，还是无所谓
     * Java泛型中的标记符含义：
     * E - Element (在集合中使用，因为集合中存放的是元素)
     * T - Type（Java 类）
     * K - Key（键）
     * V - Value（值）
     * N - Number（数值回类型）
     * ？ - 表示不确定的java类型
     * S、U、V - 2nd、3rd、4th types
     * @param args
     */
    public static void main(String[] args) {
        //测试泛型类
        GenericClass g = new GenericClass();
        g.setKey("a");
        g.setKey(1);
        g.setKey(true);

        GenericClass<String> gStr = new GenericClass<>();
        gStr.setKey("string");

        List<Number> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        printList(list);
        List<Integer> listInt = new ArrayList<>();
        listInt.add(1);
        listInt.add(2);
        listInt.add(3);
        listInt.add(4);
        printList(listInt);
    }
    /*public static void printList(List<Number> list){
        for (Number li : list) {
            System.out.println(li);
        }
    }*/
    /*public static <T> void printList(List<T> list){//泛型方法也可以解决
        for (T li : list) {
            System.out.println(li);
        }
    }*/
    public static void printList(List<? extends Number> list){//泛型方法也可以解决

    }
}
